package cnn.test.service;

import cnn.topfox.common.Response;
import cnn.topfox.service.SimpleService;
import cnn.user.dao.UserDao;
import cnn.user.entity.UserDTO;
import cnn.user.entity.UserQTO;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 核心使用的源码
 */
@Service
public class CoreService extends SimpleService<UserDao, UserDTO, UserQTO> {
    public List<UserDTO> demo1(){
        UserQTO userQTO = new UserQTO();
        userQTO.setNameOrEq("张三,李四");
        userQTO.setNameAndNe("1,2");
        userQTO.setNameAndNotLike("3,4");
        userQTO.setNameOrLike("5,6");
        //依据QTO查询 listObjects会自动生成SQL, 不用配置 xxxMapper.xml
        List<UserDTO> listUsers = listObjects(userQTO);
        return listUsers;
    }

    public List<UserDTO> demo2(){
        List<UserDTO> listUsers=listObjects(
                select("name, count('*')") //通过调用SimpleService.select() 获得或创建一个新的 EntitySelect 对象,并返回它
                        .where()         //创建一个新 Condition对象,并返回它
                        .eq("sex","男")  //条件匹配器自定义条件 返回对象 Condition
                        .endWhere()      //条件结束           返回对象 EntitySelect
                        .orderBy("name") //设置排序的字段      返回对象 EntitySelect
                        .groupBy("name") //设置分组的字段      返回对象 EntitySelect
                        .setPage(10,5)    //设置分页           返回对象 EntitySelect

        );
        return listUsers;
    }

    public List<UserDTO> demo3(){
        List<UserDTO> list1 = listObjects(select()   //select 无参数
                .where().eq("sex","男")
        );

        List<UserDTO> list2 = listObjects(select("id,name,sex") //select 一个参数
                .where().eq("sex","男")
        );

        List<UserDTO> list3 = listObjects(select("substring(name,2) as temp,", true)//select 两个参数
                .where().eq("sex","男")
        );
//        return list1;
//        return list2;
        return list3;
    }

    public Response<List<UserDTO>>  demo4(){
        Response<List<UserDTO>> response=listPage(
                select("sex,max(age)") //通过调用getEntitySelect()获得或创建一个新的 EntitySelect对象,并返回它
                        .where()       //创建一个新 Condition对象,并返回它
                        .eq("sex","男")//返回对象 Condition
                        .endWhere()    //返回对象 EntitySelect
                        .setPage(3,100)//返回对象 EntitySelect
                        .groupBy("sex")//返回对象 EntitySelect
                        .orderBy("sex")//返回对象 EntitySelect
        );
        //返回对象response说明:
        response.data();      // 主数据
        response.totalCount();//总记录数
        response.pageCount(); //当前页记录数:
        return response;
    }

}